﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using NUnit.Framework;

using Lottery.MediaData.Core;

namespace Lottery.UnitTest.MediaData {

    [TestFixture]
    public class DSHelperTestFixture {
        [Test]
        public void TestProcessAllData01() {
            var input = new List<DS>();
            var result = DSHelper.ProcessAllData(input);
            Assert.AreEqual(0, result.Count, "assert 1");

        }

        [Test]
        public void TestProcessAllData02() {
            var input = new List<DS>();
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));

            var result = DSHelper.ProcessAllData(input);
            Assert.AreEqual(1, result.Count, "assert 1");
            Assert.AreEqual(14, result[100], "assert 2");
        }

        [Test]
        public void TestProcessAllData03() {
            var input = new List<DS>();
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));

            var result = DSHelper.ProcessAllData(input);
            Assert.AreEqual(2, result.Count, "assert 1");
            Assert.AreEqual(14, result[100], "assert 2");
            Assert.AreEqual(1, result[120], "assert 3");
        }

        [Test]
        public void TestProcessAllData04() {
            var input = new List<DS>();
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(100, 120, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));

            var result = DSHelper.ProcessAllData(input);
            Assert.AreEqual(2, result.Count, "assert 1");
            Assert.AreEqual(14, result[100], "assert 2");
            Assert.AreEqual(2, result[120], "assert 3");
        }

        [Test]
        public void TestProcessAllData05() {
            var input = new List<DS>();
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(100, 120, 100));
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));

            var result = DSHelper.ProcessAllData(input);
            Assert.AreEqual(2, result.Count, "assert 1");
            Assert.AreEqual(14, result[100], "assert 2");
            Assert.AreEqual(3, result[120], "assert 3");
        }

        [Test]
        public void TestProcessAllData06() {
            var input = new List<DS>();
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(100, 120, 100));
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(120, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));

            var result = DSHelper.ProcessAllData(input);
            Assert.AreEqual(2, result.Count, "assert 1");
            Assert.AreEqual(14, result[100], "assert 2");
            Assert.AreEqual(4, result[120], "assert 3");
        }

        [Test]
        public void TestProcessAllData07() {
            var input = new List<DS>();
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(100, 120, 100));
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(120, 100, 100));
            input.Add(new DS(120, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));

            var result = DSHelper.ProcessAllData(input);
            Assert.AreEqual(2, result.Count, "assert 1");
            Assert.AreEqual(14, result[100], "assert 2");
            Assert.AreEqual(5, result[120], "assert 3");
        }

        [Test]
        public void TestProcessAllData08() {
            var input = new List<DS>();
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(100, 120, 100));
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(120, 100, 100));
            input.Add(new DS(120, 100, 100));
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));

            var result = DSHelper.ProcessAllData(input);
            Assert.AreEqual(2, result.Count, "assert 1");
            Assert.AreEqual(14, result[100], "assert 2");
            Assert.AreEqual(6, result[120], "assert 3");
        }

        [Test]
        public void TestProcessAllData09() {
            var input = new List<DS>();
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(100, 120, 100));
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(120, 100, 100));
            input.Add(new DS(120, 100, 100));
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(120, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));

            var result = DSHelper.ProcessAllData(input);
            Assert.AreEqual(2, result.Count, "assert 1");
            Assert.AreEqual(14, result[100], "assert 2");
            Assert.AreEqual(7, result[120], "assert 3");
        }

        [Test]
        public void TestProcessAllData10() {
            var input = new List<DS>();
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(100, 120, 100));
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(120, 100, 100));
            input.Add(new DS(120, 100, 100));
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(120, 100, 100));
            input.Add(new DS(100, 120, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));

            var result = DSHelper.ProcessAllData(input);
            Assert.AreEqual(2, result.Count, "assert 1");
            Assert.AreEqual(14, result[100], "assert 2");
            Assert.AreEqual(8, result[120], "assert 3");
        }

        [Test]
        public void TestProcessAllData11() {
            var input = new List<DS>();
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(100, 120, 100));
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(120, 100, 100));
            input.Add(new DS(120, 100, 100));
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(120, 100, 100));
            input.Add(new DS(100, 120, 100));
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));

            var result = DSHelper.ProcessAllData(input);
            Assert.AreEqual(2, result.Count, "assert 1");
            Assert.AreEqual(14, result[100], "assert 2");
            Assert.AreEqual(9, result[120], "assert 3");
        }

        [Test]
        public void TestProcessAllData12() {
            var input = new List<DS>();
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(100, 120, 100));
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(120, 100, 100));
            input.Add(new DS(120, 100, 100));
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(120, 100, 100));
            input.Add(new DS(100, 120, 100));
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(120, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));

            var result = DSHelper.ProcessAllData(input);
            Assert.AreEqual(2, result.Count, "assert 1");
            Assert.AreEqual(14, result[100], "assert 2");
            Assert.AreEqual(10, result[120], "assert 3");
        }

        [Test]
        public void TestProcessAllData13() {
            var input = new List<DS>();
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(100, 120, 100));
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(120, 100, 100));
            input.Add(new DS(120, 100, 100));
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(120, 100, 100));
            input.Add(new DS(100, 120, 100));
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(120, 100, 100));
            input.Add(new DS(100, 120, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));

            var result = DSHelper.ProcessAllData(input);
            Assert.AreEqual(2, result.Count, "assert 1");
            Assert.AreEqual(14, result[100], "assert 2");
            Assert.AreEqual(11, result[120], "assert 3");
        }

        [Test]
        public void TestProcessAllData14() {
            var input = new List<DS>();
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(100, 120, 100));
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(120, 100, 100));
            input.Add(new DS(120, 100, 100));
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(120, 100, 100));
            input.Add(new DS(100, 120, 100));
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(120, 100, 100));
            input.Add(new DS(100, 120, 100));
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(100, 100, 100));
            input.Add(new DS(100, 100, 100));

            var result = DSHelper.ProcessAllData(input);
            Assert.AreEqual(2, result.Count, "assert 1");
            Assert.AreEqual(14, result[100], "assert 2");
            Assert.AreEqual(12, result[120], "assert 3");
        }

        [Test]
        public void TestProcessAllData15() {
            var input = new List<DS>();
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(100, 120, 100));
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(120, 100, 100));
            input.Add(new DS(120, 100, 100));
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(120, 100, 100));
            input.Add(new DS(100, 120, 100));
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(120, 100, 100));
            input.Add(new DS(100, 120, 100));
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(120, 100, 100));
            input.Add(new DS(100, 100, 100));

            var result = DSHelper.ProcessAllData(input);
            Assert.AreEqual(2, result.Count, "assert 1");
            Assert.AreEqual(14, result[100], "assert 2");
            Assert.AreEqual(13, result[120], "assert 3");
        }

        [Test]
        public void TestProcessAllData16() {
            var input = new List<DS>();
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(100, 120, 100));
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(120, 100, 100));
            input.Add(new DS(120, 100, 100));
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(120, 100, 100));
            input.Add(new DS(100, 120, 100));
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(120, 100, 100));
            input.Add(new DS(100, 120, 100));
            input.Add(new DS(100, 100, 120));
            input.Add(new DS(120, 100, 100));
            input.Add(new DS(100, 120, 100));

            var result = DSHelper.ProcessAllData(input);
            Assert.AreEqual(2, result.Count, "assert 1");
            Assert.AreEqual(14, result[100], "assert 2");
            Assert.AreEqual(14, result[120], "assert 3");
        }

        [Test]
        public void TestProcessAllData17() {
            var input = new List<DS>();
            input.Add(new DS(1, 2, 3));
            input.Add(new DS(4, 5, 6));
            input.Add(new DS(7, 8, 9));
            input.Add(new DS(10, 11, 12));
            input.Add(new DS(13, 14, 15));
            input.Add(new DS(16, 17, 18));
            input.Add(new DS(19, 20, 21));
            input.Add(new DS(22, 23, 24));
            input.Add(new DS(25, 26, 27));
            input.Add(new DS(28, 29, 30));
            input.Add(new DS(31, 32, 33));
            input.Add(new DS(34, 35, 36));
            input.Add(new DS(37, 38, 39));
            input.Add(new DS(40, 41, 42));

            var result = DSHelper.ProcessAllData(input);
            Assert.AreEqual(42, result.Count, "assert 1");
            for (int i = 1; i <= 42; i++) {
                string info = string.Format("媒体数 {0} 的场数为1", i);
                Assert.AreEqual(1, result[i], info);
            }
        }
    }
}
